package upiot

import "encoding/json"

//
//type UpiotCardStatus string
//
//const (
//	CardUsing          UpiotCardStatus = "正使用"  // 正使用
//	CardTesting        UpiotCardStatus = "测试期"  // 测试期
//	CardStopped        UpiotCardStatus = "停机"   // 停机
//	CardPendingDeleted UpiotCardStatus = "预销号"  // 预销号
//	CardDeleted        UpiotCardStatus = "已销号"  // 已销号
//	CardSilent         UpiotCardStatus = "沉默期"  // 沉默期
//	CardKeeping        UpiotCardStatus = "停机保号" // 停机保号
//	CardUnknown        UpiotCardStatus = "未知"   // 未知
//	CardInStock        UpiotCardStatus = "库存期"  // 库存期
//)

type UpiotCardStatus string

const (
	CardUsing          UpiotCardStatus = "00" // 正使用
	CardTesting        UpiotCardStatus = "10" // 测试期
	CardStopped        UpiotCardStatus = "02" // 停机
	CardPendingDeleted UpiotCardStatus = "03" // 预销号
	CardDeleted        UpiotCardStatus = "04" // 已销号
	CardSilent         UpiotCardStatus = "11" // 沉默期
	CardKeeping        UpiotCardStatus = "12" // 停机保号
	CardUnknown        UpiotCardStatus = "99" // 未知
	CardInStock        UpiotCardStatus = "15" // 库存期
)

func (s UpiotCardStatus) String() string {

	var (
		statusMap = map[UpiotCardStatus]string{
			"00": "正使用",
			"10": "测试期",
			"02": "停机",
			"03": "预销号",
			"04": "销号",
			"11": "沉默期",
			"12": "停机保号",
			"99": "未知",
			"15": "库存期",
		}
	)

	return statusMap[s]
}

type productsForCardRechargeItem struct {
	Id                     string `json:"id"`                         // 产品ID
	Title                  string `json:"title"`                      // 产品名称
	BgCode                 string `json:"bg_code"`                    // 计费组编码
	Months                 int8   `json:"months"`                     // 充值时常，单位月
	AllowEffectInstant     bool   `json:"allow_effect_instant"`       // 是否与允许立即生效
	IsNB                   bool   `json:"is_nb"`                      // 是否为NB卡的产品
	IsSingleTermAccProduct bool   `json:"is_single_term_acc_product"` // 是否是单周期累计产品
}

type productsForPoolRechargeItem struct {
	Id                 string `json:"id"`                   // 产品ID
	Title              string `json:"title"`                // 产品名称
	BgCode             string `json:"bg_code"`              // 计费组编码
	Months             int8   `json:"months"`               // 充值时常，单位月
	AllowEffectInstant bool   `json:"allow_effect_instant"` // 是否与允许立即生效
}

// ProductsForCardRechargeResult 流量卡充值产品查询结果
type ProductsForCardRechargeResult struct {
	Rows []productsForCardRechargeItem `json:"rows"`
}

// ProductsForPoolRechargeResult 流量池充值产品查询结果
type ProductsForPoolRechargeResult struct {
	Rows []productsForPoolRechargeItem `json:"rows"`
}

type dailyUsage struct {
	Date      string  `json:"date"`
	DataUsage float32 `json:"data_usage"`
}

// MonthDailyUsage 指定月每日使用流量
type MonthDailyUsage struct {
	Rows []dailyUsage `json:"rows"`
}

// ChargeForCardDataResult 流量卡流量充值结果
type ChargeForCardDataResult struct {
	OrderNo        string `json:"order_no,omitempty"`
	Balance        string `json:"balance,omitempty"`
	NewExpiryDate  string `json:"new_expiry_date,omitempty"`
	NewDataBalance string `json:"new_data_balance,omitempty"`
}

func (c ChargeForCardDataResult) String() json.RawMessage {

	b, _ := json.Marshal(&c)
	return b
}

// ChargeForPoolDataResult 流量池充值结果
type ChargeForPoolDataResult struct {
	OrderNo        string `json:"order_no"`         // 充值订单单号
	Balance        string `json:"balance"`          // 充值后的账户余额
	NewDataPlan    string `json:"new_data_plan"`    // 充值后的流量池总流量，单位MB
	NewDataBalance string `json:"new_data_balance"` // 充值后的流量池剩余流量，单位MB
}

type CardItem struct {
	Iccid  string `json:"iccid"`
	Imei   string `json:"imei"`
	Imsi   string `json:"imsi"`
	Imsi2  string `json:"imsi2"`
	Msisdn string `json:"msisdn"`
}

// CardListResult 流量卡列表
type CardListResult struct {
	PerPage  int        `json:"per_page"`  // 每页条数
	NumPages int        `json:"num_pages"` // 页数
	Page     int        `json:"page"`      // 当前页
	Rows     []CardItem `json:"rows"`      // 当前页数据
}

type CardInfo struct {
	Imsi              string `json:"imsi"`
	Imsi2             string `json:"imsi2"`
	Msisdn            string `json:"msisdn"`
	Iccid             string `json:"iccid"`
	Code              string `json:"code"`                 // 计费组code
	SpCode            string `json:"sp_code"`              // 短信端口号
	CustomizeComment  string `json:"customize_comment"`    // 自定义标签
	SimType           string `json:"sim_type"`             // SIM卡类型
	Active            bool   `json:"active"`               // 是否激活？
	Carrier           string `json:"carrier"`              // 运营商
	SupportSms        bool   `json:"support_sms"`          // 是否支持短信
	ActiveDate        string `json:"active_date"`          // 激活日期
	ValidDate         string `json:"valid_date"`           // 计费开始日期
	ExpiryDate        string `json:"expiry_date"`          // 计费结束日期
	DataPlan          string `json:"data_plan"`            // 流量套餐大小
	DataUsage         string `json:"data_usage"`           // 当月流量使用量
	DataBalance       string `json:"data_balance"`         // 流量余量
	DataTrafficAmount string `json:"data_traffic_amount"`  // 总流量
	InactiveMonth     any    `json:"inactive_month"`       // 销户月份
	AccountStatus     string `json:"account_status"`       // 卡片状态
	OutboundDate      string `json:"outbound_date"`        // 出库日期
	OutDataUsage      int    `json:"out_data_usage"`       // 超出流量用量
	TestUsedDataUsage string `json:"test_used_data_usage"` // 测试期已用流量
	SilentValidDate   string `json:"silent_valid_date"`    // 沉默期开始日期
	TestValidDate     string `json:"test_valid_date"`      // 测试期开始日期
	Accumulated       bool   `json:"accumulated"`          // 是否是累计卡
}

type ExpiringCardItem struct {
	Iccid      string `json:"iccid"`
	Imsi       string `json:"imsi"`
	Msisdn     string `json:"msisdn"`
	ExpiryDate string `json:"expiry_date"` // 到期时间
}

type ExpiringCardsResult struct {
	PerPage  int                `json:"per_page"`
	NumPages int                `json:"num_pages"`
	Page     int                `json:"page"`
	Rows     []ExpiringCardItem `json:"rows"`
}
